# -*- coding: utf-8 -*-

'''
    【简介】 tkinter基本使用

'''

from tkinter import Tk, Label, Entry, Button, messagebox, Text, Checkbutton, Menu, StringVar, IntVar
from tkinter.ttk import Radiobutton, Combobox


class GUI:
    def __init__(self):
        # 创建窗口，实例化一个窗口对象
        self.root = Tk()

        # 设置窗口大小与位置 长x宽+x+y
        self.root.geometry("600x450+150+150")

        # 设置标题
        self.root.title("个性小窗口")

        # 菜单
        self.menuBar = Menu(self.root)
        self.root.config(menu=self.menuBar)

        # 定义组件
        self.interface()

    def interface(self):

        # 添加按钮1 在添加按钮时直接定义命令函数
        self.btn1 = Button(self.root, text='提交1', font=('宋体', 12), fg='red', command=self.func)
        self.btn1.grid(row=0, column=0, ipadx=10)

        # 添加按钮2
        self.btn2 = Button(self.root, text='提交2', font=('宋体', 12), fg='red')
        # 绑定函数
        self.btn2.bind("<Button-1>", self.func1)
        self.btn2.grid(row=0, column=1, ipadx=10)

        # 添加按钮3 关闭窗口
        self.btn3 = Button(self.root, text="退出", command=self.root.destroy, bg='Gray')
        self.btn3.grid(row=0, column=2, ipadx=10)

        # 添加标签控件,并设置基本样式
        self.label = Label(self.root, text='个性：', font=('宋体', 12), fg='blue')
        # 定位
        self.label.grid(row=1, column=0)

        # 定义输入默认值
        self.entry00 = StringVar()
        self.entry00.set('默认信息')

        # 添加输入框
        self.entry = Entry(self.root, font=('宋体', 12), fg='red', textvariable=self.entry00)
        self.entry.grid(row=1, column=1)

        self.get_entry_btn = Button(self.root, text="获取输入框内容", command=self.get_entry, fg='blue')
        self.get_entry_btn.grid(row=1, column=2)

        # 文本输入框
        self.text01 = Text(self.root, width=20, height=10)
        self.text01.grid(row=2, column=0)
        self.text01.insert("insert", "文本输入框-默认信息")

        self.del_text_btn = Button(self.root, text="清空文本框", command=self.del_text, fg='blue')
        self.del_text_btn.grid(row=2, column=1)

        self.get_text_btn = Button(self.root, text="获取文本框内容", command=self.get_text, fg='blue')
        self.get_text_btn.grid(row=2, column=2)

        # 复选框
        self.v1 = IntVar()
        self.Check = Checkbutton(self.root, text="复选框", command=self.check_box, variable=self.v1)
        self.Check.grid(row=3, column=0)

        self.text02 = Text(self.root, width=20, height=10)
        self.text02.grid(row=3, column=1)

        self.del_check_btn = Button(self.root, text="清空复选框选中", command=self.del_check, fg='blue')
        self.del_check_btn.grid(row=3, column=2)

        # 单选按钮
        self.Radiobutton01 = Radiobutton(self.root, text="名称")
        self.Radiobutton01.grid(row=4, column=0)

        self.com_value = StringVar()
        self.com_value.set('2')
        # 下拉框
        values = ['1', '2', '3', '4']
        self.combobox = Combobox(
            master=self.root,  # 父容器
            height=10,  # 高度,下拉显示的条目数量
            width=20,  # 宽度
            state='',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled(禁止输入选择)
            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
            font=('', 15),  # 字体、字号
            textvariable=self.com_value,  # 通过StringVar设置可改变的值
            values=values,  # 设置下拉框的选项
        )
        self.combobox.bind("<<ComboboxSelected>>", self.pick)
        self.combobox.grid(row=5, column=0)

        self.del_all_btn = Button(self.root, text="清空控件", command=self.del_all, fg='blue')
        self.del_all_btn.grid(row=10, column=2)
        # 菜单添加
        self.menuBar.add_cascade(label='文件', menu=self.papers())
        self.menuBar.add_cascade(label='查看', menu=self.about())

    def papers(self):
        fmenu = Menu(self.menuBar, tearoff=0)
        for item in ["新建", '打开', '保存', '另存为']:
            fmenu.add_command(label=item)
        return fmenu

    def about(self):
        amenu = Menu(self.menuBar, tearoff=0)
        for item in ["文件扩展名", '隐藏项目']:
            amenu.add_checkbutton(label=item)
        return amenu

    def func(self):
        messagebox.showinfo('xxx', '提交成功')

    def func1(self, e):
        print('提交成功')

    def get_entry(self):
        res = self.entry00.get()
        messagebox.showinfo("获取输入框的值", res)

    def del_text(self):
        self.text01.delete(1.0, 'end')

    def get_text(self):
        res = self.text01.get('0.0', 'end')
        messagebox.showinfo("获取文本框的值", res)

    def check_box(self):
        if self.v1.get() == 1:
            self.text02.insert(0.0, '勾选\n')
        else:
            self.text02.insert(0.0, '未勾选\n')

    def del_check(self):
        self.Check.deselect()

    def del_all(self):
        lst = [self.btn1, self.btn2, self.btn3, self.label, self.text01, self.text02, self.entry, self.Check,
               self.get_entry_btn, self.get_text_btn, self.del_check_btn, self.get_text_btn, self.del_all_btn,
               self.del_text_btn, self.combobox]
        for i in lst:
            i.grid_forget()

    def pick(self, e):
        print('选中的数据:{}'.format(self.combobox.get()))
        print('value的值:{}'.format(self.com_value.get()))


if __name__ == '__main__':
    gui = GUI()
    # 显示窗口
    gui.root.mainloop()
